<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>

</head>

<body>

    <script>

        //回调函数嵌套的噩梦：层层嵌套。
        /* $.ajax({
            url: "mock/user.json",
            success(data) {
                console.log("查询用户：", data);
                $.ajax({
                    url: `mock/user_corse_${data.id}.json`,
                    success(data) {
                        console.log("查询到课程：", data);
                        $.ajax({
                            url: `mock/corse_score_${data.id}.json`,
                            success(data) {
                                console.log("查询到分数：", data);
                            },
                            error(error) {
                                console.log("出现异常了：" + error);
                            }
                        });
                    },
                    error(error) {
                        console.log("出现异常了：" + error);
                    }
                });
            },
            error(error) {
                console.log("出现异常了：" + error);
            }
        }); */

        // promise 解决回调地狱
        /* new Promise((resolve, reject) => {
            $.ajax({
                url: "mock/user.json",
                success(result) {
                    resolve(result);
                },
                error(error) {
                    reject(error);
                }
            });
        }).then(res => {
            console.log('请求处理成功，获取的结果为：', res);
        }).catch(err => console.log('请求处理失败，获取的结果为：', err)); */


        // // 优化回调地狱
        // new Promise((resolve, reject) => {
        //     $.ajax({
        //         url: "mock/user.json",
        //         success(result) {
        //             resolve(result);
        //         },
        //         error(error) {
        //             reject(error);
        //         }
        //     });
        // }).then(res => {
        //     // res 即是resolve的入参result
        //     console.log("查询用户：", res);

        //     // 返回 Promise，下一步可以继续 .then 进行调用
        //     return new Promise((resolve, reject) => {

        //         $.ajax({
        //             url: `mock/user_corse_${res.id}.json`,
        //             success(result) {
        //                 console.log("查询到课程：", result);
        //                 resolve(result);
        //             },
        //             error(error) {
        //                 console.log("出现异常了：" + error);
        //             }
        //         });
        //     });
        // }).then(res => {
        //     // 由于查询分数是最后一步，这里不再返回Promise
        //     $.ajax({
        //         url: `mock/corse_score_${res.id}.json`,
        //         success(result) {
        //             console.log("查询到分数：", result);
        //         },
        //         error(error) {
        //             console.log("出现异常了：" + error);
        //         }
        //     });
        // }).catch(err => console.log('通过用户获取分数异常：', err))


        // Promise 优化
        let get = (url, data) => { // 实际开发中会单独放到 common.js 中
            return new Promise((resolve, reject) => {
                $.ajax({
                    url: url,
                    data: data,
                    type: 'GET',
                    success: function (result) {
                        resolve(result);
                    },
                    error(error) {
                        reject(error);
                    }
                })
            });
        }

        get("mock/user.json").then(res => {
            return get(`mock/user_corse_${res.id}.json`);
        }).then(res => {
            return get(`mock/corse_score_${res.id}.json`);
        }).then(res => {
            console.log('获取到的分数为：', res.score);
        }).catch(err => {
            console.log('错误信息为：', err);
        });


    </script>

</body>

</html>